package com.ruoyi.common.utils;

import org.springframework.util.ReflectionUtils;

import java.lang.reflect.Field;

/**
 * 字符串工具类
 *
 * @author ruoyi
 */
public class YoushudaUtils
{
    /**
     * 转换空属性
     * 处理类中为null的字符型属性，主要用于MybatisPlus修改时，为空数据不修改的问题
     *
     * @return
     */
    public static Object convertNullAttr(Object obj) {
        /**
         * 遍历传入对象属性，将值赋值到需要转换的对象中
         */
        Field[] fields = obj.getClass().getDeclaredFields();

        for (int i = 0, len = fields.length; i < len; i++) {
            // 对于每个属性，获取属性名
            String fromObjFieldName = fields[i].getName();
            if ("serialVersionUID".equals(fromObjFieldName)) {
                continue;
            }
            /**
             * 仅处理基本数据类型
             */
            if (fields[i].getType().getName().indexOf("java.lang.String") <= -1) {
                continue;
            }
//            System.out.println(fields[i].getName() + "----" + fields[i].getType().getName());
            /**
             * 遍历需要回去的时候的对象所有字段，判断字段或字段上注解是否存在
             */
            try {
                // 获取原来的访问控制权限
                boolean accessFlag = fields[i].isAccessible();
                // 修改访问控制权限
                fields[i].setAccessible(true);
                // 获取在对象f中属性fields[i]对应的对象中的变量
                Object data;
                try {
                    data = fields[i].get(obj);

                    if (StringUtils.isEmpty(String.valueOf(data))) {
                        ReflectionUtils.setField(fields[i], obj, "");
                    }

                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                // 恢复访问控制权限
                fields[i].setAccessible(accessFlag);
            } catch (IllegalArgumentException ex) {
                ex.printStackTrace();
            }
        }
        return obj;
    }

    /**
     * 属性名转表名
     *
     * @param benName
     * @return
     */
    public static String benToTable(String benName) {
        String str = "";
        if (StringUtils.isEmpty(benName)) {
            return null;
        }
        int lastIndexOf = benName.lastIndexOf(".");
        if (lastIndexOf >= 0) {
            benName = benName.substring(lastIndexOf + 1, benName.length());
        }
        char[] ch = benName.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            if (ch[i] >= 'A' && ch[i] <= 'Z') {
                ch[i] = (char) (ch[i] + 32);
                str += i == 0 ? "" : "_";
            }
            str += ch[i];
        }
        return str;
    }
}
